SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spActualizarTrackingDePasos]
@idPaso int,
@Observacion varchar(255),
@Tracking int
AS
SET NOCOUNT ON
update tb_TrackingDePasos set Observacion = @Observacion, VistoBueno = 'S' where Paso = @idPaso

-- Si es el ultimo paso de una tarea
if exists (Select * from tb_TrackingDePasos where Tracking = @Tracking and VistoBueno = 'N')
	return(-1)
else begin
	--Se registra la fecha y hora en que se termina la tarea	
	update tb_Tracking  set Hasta = getdate() where idTracking = @Tracking

	--Exctraemos la tarea correspondiente a los pasos que fueron ejecutados.
	declare @tarea int
	select @tarea = (Select tarea from tb_Tracking where idTracking = @Tracking)
	
	--Nos fijamos cuales son (o cual es) las tareas siguientes
	declare @posterior int
	select @posterior = -1
	select @posterior = (Select posterior from tb_Tareas where idTarea = @Tarea)
	declare @posterior2 int
	select @posterior2 = -1
	select @posterior2 = (Select posterior2 from tb_Tareas where idTarea = @Tarea)
	declare @tramite int
	select @tramite = (Select tramite from tb_Tracking where idTracking = @Tracking)	

	if @posterior <> -1 
	begin
		insert into tb_tracking (Desde, Estado, FechaActivacion, NroSubTramite, Responsable, Tarea, Tramite)
		values (getdate(), 3, null, 1, null, @posterior, @Tramite)
		declare @idTracking int
		select @idTracking = @@IDENTITY
		-- Actualizamos Tracking de Pasos para esta tarea
		declare @Paso int
		declare Pasos cursor for Select idPaso from tb_Pasos where Tarea = @posterior order by NroOrdenEnTarea
		open Pasos

		fetch next from Pasos into @Paso

		while @@fetch_status = 0 begin
			insert into tb_TrackingDePasos (Observacion, Paso, Tracking, VistoBueno)
			values (null, @Paso, @idTracking, 'N')
			fetch next from Pasos into @Paso
		end	

		close Pasos
		deallocate Pasos		

		if @posterior2 <> -1 begin				insert into tb_tracking (Desde, Estado, FechaActivacion, NroSubTramite, Responsable, Tarea, Tramite)
			values (getdate(), 3, null, 1, null, @posterior2, @tramite) 

			declare Pasos cursor for Select idPaso from tb_Pasos where Tarea = @posterior2 order by NroOrdenEnTarea
		open Pasos

		declare @idTracking2  int
		select @idTracking2 = @@IDENTITY
		-- Actualizamos Tracking de Pasos para esta tarea
		declare @Paso2 int
		fetch next from Pasos into @Paso2

		while @@fetch_status = 0 begin
			insert into tb_TrackingDePasos (Observacion, Paso, Tracking, VistoBueno)
			values (null, @Paso2, @idTracking2, 'N')
			fetch next from Pasos into @Paso2
		end	

		close Pasos
		deallocate Pasos		
	
				end		
	update tb_Tracking set Estado = (Select idEstadoTracking from tb_EstadosDeTracking where upper(descripcion) = 'FINALIZADO') where idTracking = @Tracking	
	end
	else 
	begin
	--Si la tarea actual es una tarea FIN
	    if (Select Tipo from tb_Tareas where idTarea = @Tarea) = (Select idTipoDeTarea from tb_TiposDeTareas where  upper(descripcion) = 'FIN') begin
		update tb_TramitesDocumentos set FechaYHoraFin = getdate(), Estado = (Select idEstadoTramite from tb_EstadosDeTramites where upper(descripcion)='TERMINADO') where idTramite = @Tramite	
	   	--update tb_Tracking set Estado = (Select idEstadoTracking from tb_EstadosDeTracking where upper(descripcion) = 'FINALIZADO') where idTracking = @Tracking
		update tb_Tracking set Estado = (Select idEstadoTracking from tb_EstadosDeTracking where upper(descripcion) = 'FINALIZADO') where idTracking = @Tracking	 
	   end	
	end
end
GO
